package com.it.a02jdk8datedemo;

import java.time.Instant;
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class A03_ZonedDateTimeDemo {
    public static void main(String[] args) {
        /*
            static ZonedDateTime now() 获取当前时间的ZonedDateTime对象
            static ZonedDateTime ofXxxx(。。。) 获取指定时间的ZonedDateTime对象
            ZonedDateTime withXxx(时间) 修改时间系列的方法
            ZonedDateTime minusXxx(时间) 减少时间系列的方法
            ZonedDateTime plusXxx(时间) 增加时间系列的方法
         */

        //1.获取当前时间对象（带时区）
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now);//2025-03-01T15:15:57.760563800+08:00[Asia/Shanghai]

        //2.获取指定时间对象（带时区）
        //年月日时分秒纳秒方式指定
        ZonedDateTime time1 = ZonedDateTime.of(2025, 3, 1, 11, 12, 12, 0, ZoneId.of("Asia/Shanghai"));
        System.out.println(time1);

        //通过Instant+时区的方式指定获取时间对象
        Instant instant = Instant.ofEpochMilli(0L);
        //System.out.println(instant);
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
        ZonedDateTime time2 = ZonedDateTime.ofInstant(instant, zoneId);
        System.out.println(time2);

        //3.withXxx修改时间系统的方法
        ZonedDateTime time3 = time2.withYear(2000);
        System.out.println(time3);//2000-01-01T08:00+08:00[Asia/Shanghai]

        //4.减少时间
        ZonedDateTime time4 = time3.minusDays(1);
        System.out.println(time4);//1999-12-31T08:00+08:00[Asia/Shanghai]

        //5.增加时间
        ZonedDateTime time5 = time3.plusDays(1);
        System.out.println(time5);//2000-01-02T08:00+08:00[Asia/Shanghai]

        //细节：
        //jdk8新增的事件对象都是不可变的
        //如果我们修改了，减少了，增加了时间
        //那么调用者是不会发生改变的，产生一个新的时间。
    }
}
